﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.UI.WebControls;
using PortalCurriculo.Domain;
using PortalCurriculo.Util.Translation;
using PortalCurriculo.WebUI.Helpers;

namespace PortalCurriculo.WebUI.Selecionadores
{
    public partial class VisualizarVaga : RecruiterAccessHelper
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            int idVaga = ParseIdQueryString();

            if (idVaga == 0)
                Response.Redirect("MinhasVagas.aspx");

            PreencherTela(idVaga);
        }

        private void PreencherTela(int idVaga)
        {
            Vaga vaga = new Vaga {Id = idVaga}.Selecionar();

            PreencherDadosBasicos(vaga);
            PreencherConsultorias(vaga);
            PreencherRequisitos(vaga);
            PreencherValores(vaga.Id);
            PreencherFases(vaga.Id);
            PreencherQuestionarios(vaga.Id);
        }

        private void PreencherQuestionarios(int idVaga)
        {
            PortalQuestionarios.IdVaga = idVaga;
            lnkEditarQuestionarios.PostBackUrl += idVaga;
        }

        private void PreencherValores(int idVaga)
        {
            portalValores.IdVaga = idVaga;
            lnkEditarValores.PostBackUrl += idVaga;
        }

        private void PreencherFases(int idVaga)
        {
            PortalFases.IdVaga = idVaga;
            lnkEditarFases.PostBackUrl += idVaga;
        }

        private void PreencherDadosIdioma(int idVaga)
        {
            var vagaIdioma = new VagaIdioma {IdVaga = idVaga};
            lsvIdioma.DataSource = vagaIdioma.SelecionarLista();
            lsvIdioma.DataBind();
        }

        protected void lsvIdioma_ItemDataBound(object sender, ListViewItemEventArgs e)
        {
            var item = (ListViewDataItem) e.Item;
            var vagaIdioma = (VagaIdioma) item.DataItem;

            var idioma = (Label) item.FindControl("lblIdioma");
            var tipo = (Label) item.FindControl("lblTipo");
            var nivel = (Label) item.FindControl("lblNivel");

            idioma.Text = vagaIdioma.Idioma ==  null ? vagaIdioma.Outro : vagaIdioma.Idioma.Descricao;
            nivel.Text = vagaIdioma.Nivel.Nome;

            string sim = Translator.TranslateMessage(Messages.Sim, Page.AppRelativeVirtualPath);
            string nao = Translator.TranslateMessage(Messages.Nao, Page.AppRelativeVirtualPath);

            if (vagaIdioma.Imprescindivel != null) tipo.Text = (bool) vagaIdioma.Imprescindivel ? sim : nao;
        }

        private void PreencherRequisitos(Vaga vaga)
        {
            string sim = Translator.TranslateMessage(Messages.Sim, Page.AppRelativeVirtualPath);
            string nao = Translator.TranslateMessage(Messages.Nao, Page.AppRelativeVirtualPath);
            string naoInformado = Translator.TranslateMessage(Messages.NaoInformado, Page.AppRelativeVirtualPath);
            string anos = Translator.TranslateMessage(DataHora.Messages.AnoAnos, Page.AppRelativeVirtualPath);
            string meses = Translator.TranslateMessage(DataHora.Messages.MesMeses, Page.AppRelativeVirtualPath);

            lblDeficiente.Text = vaga.DeficienteFisico
                                     ? sim
                                     : vaga.DeficienteFisico == false
                                           ? nao
                                           : naoInformado;
            lblEmpresaAberta.Text = vaga.EmpresaAberta == true
                                        ? sim
                                        : vaga.EmpresaAberta == false
                                              ? nao
                                              : naoInformado;
            lblMaximoExperiencia.Text = vaga.TempoExperienciaMaximo == null
                                            ? naoInformado
                                            : string.Concat(vaga.TempoExperienciaMaximo, " ",
                                                            vaga.TipoTempoExperienciaMaximo == "M" ? anos : meses);
            lblMinimoExperiencia.Text = vaga.TempoExperienciaMinimo == null
                                            ? naoInformado
                                            : string.Concat(vaga.TempoExperienciaMinimo, " ",
                                                            vaga.TipoTempoExperienciaMinimo == "M" ? anos : meses);

            PreencherDadosIdioma(vaga.Id);

            lnkEditarRequisitos.PostBackUrl += vaga.Id;
        }

        private void PreencherConsultorias(Vaga vaga)
        {
            List<VagaRH> vagasRh = new VagaRH {IdVaga = vaga.Id}.SelecionarLista();

            lnkEditarConsultorias.PostBackUrl += vaga.Id;

            lsvConsultoria.DataSource = vagasRh;
            lsvConsultoria.DataBind();
        }

        private void PreencherDadosBasicos(Vaga vaga)
        {
            lblArea.Text = vaga.Cargo.EspecializacaoArea.Area.Descricao;
            lblCargo.Text = vaga.Cargo.Descricao;
            lblConfidencial.Visible = !vaga.DivulgarDadosEmpresa;
            lblDescricao.Text = vaga.Descricao;
            lblEmpresa.Text = vaga.Empresa.Usuario.Pessoa.PessoaJuridica.NomeFantasia;
            lblEspecializacao.Text = vaga.Cargo.EspecializacaoArea.Descricao;
            //lblFormaContratacao.Text = vaga.FormaContratacao.Descricao;
            lblLocalizacao.Text = vaga.Bairro == null
                                      ? vaga.Empresa.Usuario.Pessoa.Enderecoes.First().CEP.Bairro.Descricao
                                      : vaga.Bairro.Descricao;
            lblNivelProfissional.Text = vaga.NivelProfissional.Descricao;
            lblSelecionador.Text = vaga.Selecionador.Usuario.Pessoa.PessoaFisica.NomeCompleto;

            lnkEditarDadosBasicos.PostBackUrl += vaga.Id;
        }

        protected void lsvConsultoria_ItemDataBound(object sender, ListViewItemEventArgs e)
        {
            var item = (ListViewDataItem) e.Item;
            var vagaRh = (VagaRH) item.DataItem;

            var nome = (Label) item.FindControl("lblNome");
            var email = (Label) item.FindControl("lblEmail");
            var site = (Label) item.FindControl("lblSite");
            var telefone = (Label) item.FindControl("lblTelefone");
            var status = (Label) item.FindControl("lblStatus");

            nome.Text = vagaRh.Empresa.Usuario.Pessoa.PessoaJuridica.NomeFantasia;
            email.Text = vagaRh.Empresa.Usuario.Pessoa.Email;
            site.Text = vagaRh.Empresa.Usuario.Pessoa.Site;
            status.Text = vagaRh.ConverterStatus(vagaRh.Status);

            if (vagaRh.Empresa.Usuario.Pessoa.Telefones.Count > 0)
                telefone.Text = vagaRh.Empresa.Usuario.Pessoa.Telefones.First().Numero;
        }
    }
}